Disclaimer: This information is provided as is. There may be errors in this information. You may use this information only if you agree that Minimalist / Coinop.org, its employees, and noted authors will never be held responsible for any damage, injury, death, mayhem, etc. caused by errors in the information. When working with high voltage, never work alone and always follow safety precautions.

Document Title: [Boris - Converting Schematics to an Emulator V1.2.html (html file)]

Converting Schematics to an Emulator V1.2 Original URL: http://atarihq.com/danb/files/zarzon.txt


Converting Schematics to an Emulator V1.2
by Daniel Boris (dboris@erols.com)
5/9/98

Table of Contents

1.0 Introduction
2.0 Zarzon Hardware
	2.1 Introduction
	2.2 Processor
	2.3 Memory Map
	2.4 Roms
3.0 Video Section
	3.1 Video RAM
	3.2 CRT controller
	3.3 Video Shifter
	3.4 Color Selector
	3.5 Putting all together
4.0 Sound (to be added later)



Appendix 1: Converting Binary to Hex

1.0 Introduction

The purpose of the document is to explain the basic process for extracting
the information necessary to write an emulator (or MAME driver) from
schematics of an arcade machine. I will be using the game Zarzon as an
example. It is best that you follow along with the schematics as you read
this document. You can get the schematics at:

http://www.spies.com/arcade/bronzeage/

You may also wish to download the ROM images for the game, they can be
found at:

ftp://ftp.tant.com/incoming (They may eventually be moved into the main archive)

NOTE: I have made ever attempt to be sure this document is accurate, but it
is inevitable that some mistakes have slipped through. Use this info at you
own risk.

I tried to keep this document as simple as possible but to fully understand
it you should have a basic knowledge of digital electronics. You should also
have a working knowledge of binary numbers. I will refer to signals as being
high or low, high=1 and low=0 in binary.



2.0 Zarzon's Hardware

2.1 Introduction

There are 2 boards in this game and 3 pages of schematics for each so I will
refer to the pages as CPU1, CPU2, CPU3, CRT1,CRT2,CRT3. Chips are all numbered
on the schematics, these numbers appear within the box of each chip. The same
numbers are used on both boards so chip 8 on the CPU board is not the same
as chip 8 on the CRT board.

The CPU board contains the processor, RAM, ROM, address decoding, and the
sound hardware. The CRT board contains the video circuitry, and I/O ports.
Interconnections between the boards ae shown as rectangles with rounded ends
and a number and letter inside. Connections that go off the boards to other
parts of the machine (like the power supply or control panel) are shown as
circles with a number inside. You can determine where these connections go
by looking at the wiring diagram in the manual.

2.2 Processor

The first step is to determine what processor(s) the board uses. This is
pretty easy on Zarzon, on page CPU1 the CPU (chip 11) is clearly marked
as a 6502. To determine the speed of the processor we look at pin 37 which
is the clock input to a 6502. That signal is generated by the clock circuit
in the upper left corner of page CPU1. It starts with an 11.289Mhz oscillator,
which enters the clock input of chip 34 (74LS163). This chip is a counter
and is used to divide down the input clock. The clock comes out of
pin 11 (QD) which is the divide by 16 output, so the processor
clock = 11.289Mhz/8 = .705562Mhz.

The IRQ input to the processor goes over to page CRT2 chip 80. This chip is
a latch, when input A goes high the output will stay high until it is cleared
by a pulse on pin 5 (I will talk more about this part later). The A input
is connected to chip 2 on page CRT3. It is connected to the V-SYNC output
of chip 2 which is a CRT controller chip. V-SYNC happens at the end of each
frame of video and signals the start of vertical blank (the time it takes for
the CRT's electron beam to go from the bottom right of the screen back to the
top left).

The NMI input to the processor goes to page CPU3 where is comes through
chip 27 from input 15. This input is connected to the coin input on the
machine (see the wiring diagram), so that whenever a coin is inserted it
generated an NMI.


2.3 Memory Map

The next step is to work out the memory map for the board. The memory map
is a list of where each device in the system (RAM, ROM, I/O ports, etc) are
located in memory. To work out the memory map we must first find the address
decoder, this can be found in the upper left corner of page CPU2. The first
decodes to look at are the ones for the code ROMS, these are labeled ROM1
through ROM12 and these are connected to the CS pins on the ROMS on page CPU1.
When any one of these signals goes low then the corresponding ROM will be
enabled. All of these inputs come out of chip 12 (LS154) which is a decoder
IC.  For the LS154 to be enabled, pins 18 and 19 (which in this case are
connected together) must be low. This input comes through the inverted
27, from the XOR gate 30.

(A quick sidebar: Gate 30 demonstrates one of the pitfalls of decoding
schematics. If you don't look closely at the schematics it may appear that
Gate 30 was an OR gate, but if you look at the chips number 74LS86 it turns
out to be an XOR. I did not realize this until I tried decoding another part
of the circuit and it just wasn't making sense. So be careful when reading
the schematics)

The inputs to the XOR gate are A14 and A15 which are address lines from the
CPU, so when ever A14 OR A15 is high (but not both), the LS154 will be enabled.
Once the LS154 is enabled, one of it's 15 outputs will go low. Which output
goes low will be determined by the inputs labeled A,B,C,D which are connected
to A11,A12,A13,A15. If they are all low then output 0 (ROM1) will go low,
if A12 goes high the inputs represent a binary 2, so output 2 (ROM3) goes low.
Lets write up a table to make this a little more clear:

Address bit
15 14 13 12 | 11 10 9 8 | 7 6 5 4 | 3 2 1 0
0  1  0  0    0  x  x x   x x x x   x x x x   ROM1

To figure out ROM1 we know that A11,A12,A13,A15 have to all be 0, so we put
those in the table. If A15 is 0 then the only way for chip 12 to be enabled
is to have A14 be a 1. A10..A0 are all market x (don't care) since they
have no bearing on this decode. To figure out what address range this
represents let x = 0 and convert from binary to hex, which is $4000. Next
let x = 1 and convert to hex again, which is $47FF. So we now know that
ROM1 is enabled when the address is in the range $4000-$47FF. Lets do a table
for the rest of the ROM enables:

15 14 13 12 | 11 10 9 8 | 7 6 5 4 | 3 2 1 0
0  1  0  0    0  x  x x   x x x x   x x x x   ROM1  $4000-$47FF
0  1  0  0    1  x  x x   x x x x   x x x x   ROM2  $4800-$4FFF
0  1  0  1    0  x  x x   x x x x   x x x x   ROM3  $5000-$57FF
0  1  0  1    1  x  x x   x x x x   x x x x   ROM4  $5800-$5FFF
0  1  1  0    0  x  x x   x x x x   x x x x   ROM5  $6000-$67FF
0  1  1  0    1  x  x x   x x x x   x x x x   ROM6  $6800-$6FFF
0  1  1  1    0  x  x x   x x x x   x x x x   ROM7  $7000-$77FF

1  0  0  0    0  x  x x   x x x x   x x x x   ROM9  $8000-$87FF
1  0  0  0    1  x  x x   x x x x   x x x x   ROM10 $8800-$8FFF
1  0  0  1    0  x  x x   x x x x   x x x x   ROM11 $9000-$97FF
1  0  0  1    1  x  x x   x x x x   x x x x   ROM12 $9800-$9FFF

You will notice that we skipped ROM8, this is because that output on chip 12
does not go directly to the ROM8 signal, it passed through some other logic
first. Lets look at a table again to see why this is:

15 14 13 12 | 11 10 9 8 | 7 6 5 4 | 3 2 1 0
0  1  1  1    1  x  x x   x x x x   x x x x  chip 12 pin 8 low

If we now work out the logic for the 3 NAND gates (chip 6) we find that
ROM8 goes low, so ROM8 will be enabled at address range $7800-$7FFF. But
if this where all there is to it, then we would not need the NAND gates
so there must be something else going on. Lets look at another condition:

15 14 13 12 | 11 10 9 8 | 7 6 5 4 | 3 2 1 0
1  1  x  x    x  x  x x   x x x x   x x x x

This will also set ROM8 low, and since both A14 and A15 are high, chip 12
will NOT be enabled because of the XOR gate so we ignore all the other
addresses. So ROM8 will also be enabled at the range $C000-$FFFF. Why is
this done? The 6502 fetches it's reset and interrupt vectors from locations
$FFFA-$FFFF, so there must be a ROM in that area. This little circuit causes
the ROM connected to ROM8 to be enabled both at $7800-$7FFF and $F800-$FFFF.

Next lets look at Chip 5 which is another decoder. This decoder is enabled
whenever pins 4 and 5 are low and 6 is high. 6 is tied to +5V so it is always
high and pin 5 is connected to A13. Pin 4 is connected through chip 27 to
chip 31 in such a way that it will only be low when A14 and A15 are both low.
Time for another table:

15 14 13 12 | 11 10 9 8 | 7 6 5 4 | 3 2 1 0
0  0  0  x    x  x  x x   x x x x   x x x x   $0000-$1FFF  Chip 5 enabled

The outputs on chip 5 work the same way as chip 12, inputs A,B,C (A10,A11,A12)
select which output goes low:

15 14 13 12 | 11 10 9 8 | 7 6 5 4 | 3 2 1 0
0  0  0  0    0  0  x x   x x x x   x x x x   $000-$3FF  Y0
0  0  0  0    0  1  x x   x x x x   x x x x   $400-$7FF  Y1
0  0  0  0    1  0  x x   x x x x   x x x x   $800-$BFF  Y2
0  0  0  0    1  1  x x   x x x x   x x x x   $C00-$FFF  Y3
0  0  0  1    0  0  x x   x x x x   x x x x   $1000-$13FF  Y4
0  0  0  1    0  1  x x   x x x x   x x x x   $1400-$17FF  Y5
0  0  0  1    1  0  x x   x x x x   x x x x   $1800-$1BFF  Y6
0  0  0  1    1  1  x x   x x x x   x x x x   $1C00-$1FFF  Y7

Unfortunately the labels are not real helpful so we will have to trace them
to see what each one does:

Y0: This goes to CPU1 Chip 21 which is a RAM chip. You will notice that there
are only 8 address inputs to this chip (A0..A7), so there are only 256 bytes
of RAM here. The ram would then be at $00-$FF, and that same block of RAM
would also appear at $100-$1FF, $200-$2FF and $300-$3FF. This is known as
mirroring memory. Most of the time it is not necessary to emulate the mirroring
but in this case it is important. In a 6502 system the memory at addresses
$00-$FF is called the zero page and can be accessed faster then other sections
of memory, so this region is used to store commonly used data. The memory at
addresses $100-$1FF is the 6502's stack space. Since both of these areas are
very important to the 6502's operation we can be pretty sure that they are
both used, so we must implement the mirroring.

Y1..Y7: These all go to the CRT board and are used to enable the video memory,
for the moments lets just say that $400-$1FFF is video RAM.


The next section of address decoding is on page CRT1 in the lower left corner.
Chip 20 (74LS155) is a dual decoder meaning it has 2 separate decoding sections
in one chip. Section 1 is enabled when pin 1 (A2) is high and pin 2 is low.
Section 2 is enabled when pin 15 (A2) is low and pin 14 is low. Pins 14 and 2
are connected to chip 42 (OR gates), such that 14 will go low when the
processor is reading and 2 will go low when the processor is writing. Also
going into these OR gates is the signal 02 (Phase 2). They did something a
little tricky here. If you look at the schematics 02 is connected to a
flag labeled 2-V. These flags designate connections between the 2 boards.
The corresponding flag on the CPU board in on page CPU2. It goes
through gates 26 and 31 and back to the address decoder 12 pin 16. If you
work out the logic you can determine that the decoders on the CRT board
can only be enabled when pin 16 of chip 12 is low. Table time:


  15 14 13 12 | 11 10 9 8 | 7 6 5 4 | 3 2 1 0
  1  0  1  1    0  x  x x   x x x x   x x x x  $B000-$B7FF

The decoder on the CRT board will only be enabled in the address range
$B000-$B7FF. Now we can build a table for decoder 20 on the CRT board:

R/W  15 14 13 12 | 11 10 9 8 | 7 6 5 4 | 3 2 1 0
W    1  0  1  1    0  x  x x   x x x x   x 1 0 0  $B004
W    1  0  1  1    0  x  x x   x x x x   x 1 0 1  $B005
W    1  0  1  1    0  x  x x   x x x x   x 1 1 0  $B006
W    1  0  1  1    0  x  x x   x x x x   x 1 1 1  $B007
R    1  0  1  1    0  x  x x   x x x x   x 0 0 0  $B000
R    1  0  1  1    0  x  x x   x x x x   x 0 0 1  $B001
R    1  0  1  1    0  x  x x   x x x x   x 0 1 0  $B002
R    1  0  1  1    0  x  x x   x x x x   x 0 1 1  $B003

You will notice that in this situation I ignore the x's. These are decodes
for I/O so the address range is not important. The program normally only
uses the first address in the range (be careful because sometimes this is
not the case). The enables on the schematics are actually named with the
addresses (B000, B001, etc) so it is pretty safe to assume that these are
the correct addresses.

Now we can trace these and see what they do:

B000, B001: These go back to page CPU3 and connect to latches 46, 45.
These latches control the sound section of the board.

B002: This goes to chip 18 on CRT2. This latch only uses 2 bits, D0, D1.
      D0 - This signal goes into the video section.
      D1 - This goes to chip 80 which controls the IRQ to the CPU. D1 is
      used to clear the IRQ.

B003: This goes to chip 15 on CRT2 and is used to latch D0 and D1 onto
      signals BACK1 and BACK2. These might control the background color.

B004: This signal controls chip 5 on CRT2 and is used to read inputs.
      To figure out where these inputs come from trace the flags to page
      CPU3 where they connect to circled numbers. The numbers can be found
      on the Wiring Diagram (Figure 9 in the manual), on the block labeled
      CPU PC Board ASSY. Here are what the bits do:

      D0 = Left mov
      D1 = Right mov
      D2 = Fire
      D3 = No connection
      D4 = No connection
      D5 = No connection
      D6 = Beam
      D7 = 2P Sel

      D0,D1,D2,D6,D7 are all switches, the are low when pressed, high when
      no pressed.
      D3,D4,D5 are not connected to anything and are always high.

B005: This signal controls chip 6 on CRT2. This works the same way as B004.
      The signals are as follows:

      D0 = 1P Sel
      D1..D7: Seem to be unconnected


B006: This signal controls chip 7 on CRT2. This latches is connected to a
      dip switch.

B007: This signal controls chip 8 on CRT2. The bits have the following functions:

      D0 = NMI. The bit shows the current state of the NMI signal. This
      signal comes from page CPU3 and is controlled by the coin input of
      the machine. When a coin is inserted this bit goes low and a
      non-maskable interrupt is generated to the processor.
      D1..D3 = Unused
      D4..D7 = These inputs are connected to the counter chip 19, which is
      constantly clocked by the signal F1. This is probably used to generate
      random numbers.


There is one last piece of address decoding on page CRT3. Chip 2 is a CRT
controller chip and it has configurable registers in it. It is enabled by
the CS input on pin 25. Chip 2 will be enabled when all 3 inputs to chip 78
are high. The flag "1-2" goes to page CPU2 where it goes into NOR gate 31.
Here is the table for this decode:

15 14 13 12 | 11 10 9 8 | 7 6 5 4 | 3 2 1 0
0  0  1  1    x  x  x x   x x x x   x x x x  $3000-$3FFF


Now we can collect up all this info into a full memory map:

0000 - 00FF RAM
0100 - 01FF Mirror of RAM 0000-00FF
0200 - 02FF Mirror of RAM 0000-00FF
0300 - 03FF Mirror of RAM 0000-00FF
0400 - 1FFF Video RAM
3000 - 3FFF CRT controller
4000 - 47FF ROM1 ZARZ122.07
4800 - 4FFF ROM2 ZARZ123.08
5000 - 57FF ROM3 ZARZ124.09
5800 - 5FFF ROM4 ZARZ125.10
6000 - 67FF ROM5 ZARZ126.13
6800 - 6FFF ROM6 ZARZ127.14
7000 - 77FF ROM7 ZARZ128.15
7800 - 7FFF ROM8 ZARZ129.16
8000 - 87FF ROM9 ZARZ130.22
8800 - 8FFF ROM10 ZARZ131.23
9000 - 97FF ROM11 ZARZ132.24
9800 - 9FFF ROM12 Unused
B000 - B001 Sound
B002   0 = Flip screen (?)
       1 = Clear IRQ
B003   0,1 = Background color (?)
B004
      D0 = Left mov
      D1 = Right mov
      D2 = Fire
      D3 = No connection
      D4 = No connection
      D5 = No connection
      D6 = Beam
      D7 = 2P Sel

B005
      D0 = 1P Sel
      D1..D7: Seem to be unconnected

B006  Dip Switch
B007  D0 = Coin
      D4-D7 = Random number (?)

F800 - FFFF Mirror of 7800 - 7FFF ROM ZARZ129.16

2.4 Roms

Now that we have a memory map for the game we want to take a look at the
roms. The following rom image are found in the romset:

ZARZ122.07
ZARZ123.08
ZARZ124.09
ZARZ125.10
ZARZ126.13
ZARZ127.14
ZARZ128.15
ZARZ129.16
ZARZ130.22
ZARZ131.23
ZARZ132.24
ZARZ133.53
ZARZ134.54
ZARZ135.73
ZARZ136.75

You will notice that the 2 digit numbers at the end of the name correspond to
the chip numbers on the schematics, this makes matching them up very easy.
On page CPU1 there are 12 ROMS, these are numbered 7,8,9,10,13,14,15,16,22,
23,24,25. These roms contain the program code for the machine. We have the
first 11 ROMS, but the 12th (chip 25) is missing. It is not unusual to find
incomplete rom sets on the internet, but in this case it turns out that
the there is actually nothing missing. I talked to someone who had the board
an he told me that socket 25 is empty on the board. Why would this socket
be empty? There could be a few reasons. First it is possible that the hardware
was "over designed". They may have put room for more program code then was
actually needed. It is also possible that this board is used in more then
one game and that the socket is used in a different game.

The next 2 roms (53,54) can be found on page CPU2. It may not be immediately
obvious, but this is the section of the circuit that generates the sounds
for the game.

The final 2 roms (73,75) can be found on page CRT1. These roms are in the
video section and probably contain graphic shape data. Again you will notice
two missing roms (74,76), and it turns out that these sockets are also
empty on the board. If you look at the output enable (OE) pins on these
roms you will see that they goto connector 2-21, then to page CPU3 where
they are connected to one of the outputs of latch 45. This means that the
processor can set the state of this signal, and thus select one bank or
graphics roms or the other. It is possible that the designers of the game
intended to use two sets of graphics but for some reason ended up using only
one.

3.0 Video Section

Figuring out the video section is a little more complicated then figuring
out the memory map. We will look at the video section piece by piece, but
we will not be able to work out it's total functioning until we put all the
pieces together.

3.1 Video RAM

In the memory map section above we determined that the video RAM was at
addresses $0400-$1FFF. Now lets take a closer look at the video RAM to
see how it is accessed. There are two blocks of video RAM on the CRT board.
The first is on page CRT1 and is composed of chips 48,49,50,51,52,53,54,55.
The second is on page CRT3 and is composed of chips 32,33,34,35,36.

First lets look at the ram on page CRT3. If you look at the chip select
inputs (CS) you can see that RAMS 32 and 33 are tied together, and 34
and 25 are tied together. Since these are 4-bit RAMS, 32 and 33 are tied
together to form an 8-bit RAM, the same with 34 and 35. Chip 36 is not
tied to any of the others so it remains a 4-bit RAM. Following these CS
inputs it can be seen that they come out of chip 57, AND gates. One input
of each of these gates is connected to Y1,Y2, and Y3 which we know are
address decodes. The other inputs of the AND gates are connected to a signal
called 02. This signal come from the processor and when it is high it
indicates that the processor is trying to access the bus. When the processor
is not accessing the bus, 02 is low which causes the outputs of the and
gates to go low and this enables all the rams onto the bus. When the
processor is accessing the bus 02 is high so when either Y1, Y2, or Y3 go low
it will enable the corresponding RAMS.

Next lets look at the data bus going to each of the rams. The bus is labeled
RD1-0..7, RD2-0..7, and RD3-0..3, and are collectively called the RAM DATA BUS.
To be able to write to these RAMS the processor must have access to this bus.
If you look at page CRT2 you will see 5 chips labeled 43,44,45,46,47, this
is where the processor DATA BUS connects to the RAM DATA BUS. When pin 1 on
these chips is low data is allowed to flow from the RAM side of the chip to
the processor side. When pin 19 is low data is allowed to flow from the
processor side to the RAM side. Above these chips is a group of logic gates
that determine how they are enabled. If you work out the logic you determining that when Y1 is low, the processor can read and write to the RD3 RAM, when
Y2 is low, the processor can read and write to the RD2 RAM and when Y3 is
low the processor can read and write to the RD1 RAM.

$400-$7FF  Y1   RD1 RAM
$800-$BFF  Y2   RD2 RAM
$C00-$FFF  Y3   RD3 RAM (bits 0..3 only)

Now lets see where this data goes so we can determine what it does. RD3 goes
through chip 61 on page CRT3 to signals labeled 2C1,2C0,1C0,1C1. These
goto the circuit in the lower left corner of page CRT3 which is a color
encoding circuit. This circuit determines which color gets displayed
at each point on the screen, so RD3 has something to do with controlling
colors.

RD2 goes through chip 60 on page CRT3 to a buss called the ROM ADDRESS
BUS (RA0..7). This bus goes over to page CRT1 and connects to the
graphics roms 73,74,75,76. RD2 will thus be used to select which
graphics character is displayed at each point on the screen.

RD1 goes through chip 58 on page CRT1. This bus connects to the address
inputs of the second section of video RAM. We will talk about this more
later on.

Finally we need to look at the address inputs to these RAMS. The address
bus is called RA0 and it connects to chips 21,22, and 23 which are multiplexer
chips. These chips allow the RA0 bus to be connected to one of 2 sources. The
first source is the processor address bus, and the second source is the
video controller (chip 2). This is a very common arrangement. Part of the time
the processor is connected to the RAMS so they can be read and written, the
other part of the time the RAMS are connected to the video controller so that
the data to build the display can be read out.


Now lets look at the other section of video RAM, this can be found on page
CRT1. This RAM is composed of chips 48 through 55.

If you look at the way the chips are wired you will see something a little
odd. The RAMS are connected together in pairs, chips 48 and 50, 49 and 41,
etc. Every signal on one chip in the pair is connected to the same signal
on the other. This seems to be an error in the schematics. I believe the data
buses on the RAM chips should be like this:

48 -  SH1-0,SH1-1,SH1-2,SH1-3
50 -  SH1-4,SH1-5,SH1-6,SH1-7

49 -  SH1-0,SH1-1,SH1-2,SH1-3
51 -  SH1-4,SH1-5,SH1-6,SH1-7

52 -  SH2-0,SH2-1,SH2-2,SH2-3
54 -  SH2-4,SH2-5,SH2-6,SH2-7

53 -  SH2-0,SH2-1,SH2-2,SH2-3
55 -  SH2-4,SH2-5,SH2-6,SH2-7

Once again lets start by looking at the chip selects. The CS inputs are
connected to CS1, CS2, CS3, and CS4. These come out of chip 67 which is
a multiplexer chip. The B inputs to this chip come from Y4,Y5,Y6, and Y7
which we know are enables from the memory map:

$1000-$13FF  Y4     RAM 48,50
$1400-$17FF  Y5     RAM 49,51
$1800-$1BFF  Y6     RAM 52,54
$1C00-$1FFF  Y7     RAM 53,55

The data bus from these RAMs is connected to two buses. If you trace these
busses you will see that they first go to chips 25,26,27, and 28. These chips
simply allow the processor to read and write to these RAMS. These buses
also go over to page CRT2 and connect to chips 37,38, 39 and 40 which are
shift registers. We will talk more about this section later on.

Now for the address bus. The address input to these RAMs connects to the bus
labeled RA0..9. This bus comes from the multiplexer chips 59,71 and 72. As
usual one of the inputs to the multiplexers comes from the processor address
bus. The other set of inputs to the multiplexers comes from 2 different places.
Bits 3..9 come from chip 58 which we learned earlier come from the first set
of video RAMS. Bits 0..2 come from signals RA0..RA2 which come from the CRT
controller.

3.2 CRT controller

The next piece of the puzzle to look at is the CRT controller on page CRT3.
It is unusual to see a stock CRT controller in older arcade games. Usually
the functions that this chip provides are implemented in discreet logic.
The chip is labeled HD46505S. I was not able to find any information on this
chip, but the pinouts match a MC6845 so I am assuming it is the same chip.
The CRT controller is responsible for generating all the display timing and
the addresses that are used to read the video memory.

The CRT controller is attached to the CPU so that it's internal registers
can be setup. The registers control how the chip draws the screen. In an
arcade game it is very possible that this chip is configured once and this
configuration is never changed during the game. If this is the case then it
may not be necessary to emulate the internal registers of this chip.

Zarzon, like a lot of arcade games, uses a character based display. The
screen is divided up into individual characters. Each character is usually
8 pixels wide by 8 pixels high. A lot of machines use a display that is 32
characters wide by 32 characters high.  The memory outputs, which are
labeled MA0-MA9, and RA0-RA2, are used to address the video memory and
to determine what character should be display at each location on the screen.
The MA0-MA9 outputs are the video ram address to read each character from.
This address is 10 bits wide. If we divide that in half we get 5 bits, which i
in binary can give you the maximum value of 32. So this game uses 5 bits
for the horizontal screen positions, and 5 bits for the vertical thus giving
us the standard 32x32 character screen. The RA0-RA2 is the line counter out
put. As I said earlier, it's very common for characters to be 8 pixels high,
so the RA0-RA2 outputs are used to select which scanline of each character to
draw.

You will notice that all the video ram addresses from the CRT controller
go through exclusive OR gates. The second input on each gate is connected to
a signal called SGN. When SGN is high, every address input will be inverted
(0 will become 1 and 1 will become 0). The purpose of this is to implement
a "cocktail flip". What is "cocktail flip"? Some arcade machine were designed
to be built as cocktail table units as well as normal machines. On a cocktail
table game the 2 players sat opposite each other on either side of the
machine, and the screen would flip for each player. When SGN goes high all
the video addresses will be inverted which will flip the screen both
horizontally and vertically.

The final part of the CRT controller circuit is chip 12 which is an adder.
When SGN is low, signals MA7,MA8,MA9 just get passed from the inputs
to the outputs. When SGN is high, 1 is added to the binary value of MA7-MA9,
and passed through to the output. I am not sure of the exact purpose of this
circuit.


3.3 Video Shifter

The data that comes out of the character roms and the video RAM comes out
8 bits at a time. The video image is draw 1 bit (pixel) at a time so the
8 bits must be fed to the video output 1 bit at a time, this is the job
the video shifter. The shifter is composed of 8 shift register ICs on
page CRT2 numbered 37,38,39,40,62,63,64, and 65. The shifter register ICs take
8-bit parallel data as an input and shift it out onto the QH output one bit
at a time. These chips are connected together in pairs. Although it is not
clear on the schematics I am pretty sure the second chip in each pair is hooked
up with the data bus reversed from the first. For example:

Chip 37, D0 = SH1-0, D7=SH1-7
Chip 38, D0 = SH1-7, D7=SH1-0

The purpose of this would be to complete the cocktail flip that we discussed
in the last section. There are 4 sets of shift registers, the first set
connects to the SH1 bus, the second to the SH2 bus, the third to the OD1
bus and the fourth to the OD2 bus. The serial outputs from these shifter chips
go into chip 66 which is a data selector. The state of pin 1 (SGN) determines
if the A or B inputs get connected to the outputs. The SGN signal is used
to select between one or the other of the shifters in each pair. The 4 serial
outputs from each of the buses end up on signals 1Y, 2Y, 3Y, and 4Y.

3.4 Color Selector

In the lower left corner of page CRT3 is the color selector circuit. The
purpose of this circuit is to generate the proper RGB (Red,Green,Blue) voltage levels for each pixel on the screen. Lets work through the circuit backwards starting from the RGB outputs. The labels 2-8, 2-J, 2-9 are the RGB outputs that eventually go to the CRT. These outputs are analog signals that determine the intensity of each color at each point on the screen. The higher the voltage on each pin the brighter that color will be in the final pixel on the screen. These outputs are connected through resistors to chip 3 which is the palette ROM. The
resistors form a digital to analog converter. The R and G outputs of the ROM
have 3 bits each so they can produce 8 different voltage levels on the output.
The B outputs of the ROM have only 2 bits so this can only produce 4 voltage
levels.

Each byte in the palette ROM specifies a different color, or palette entry.
The 5 address inputs to the ROM determine which palette entry will be used
at each point on the screen. The CS input to the ROM enables the outputs when it is low. This signal goes through IC 14 which is a latch to the signal called BLANK. BLANK is generated by the CRT controller chip and goes high during the horizontal and vertical blank time. This turns off the palette ROM which disables the output to the CRT.

Next look at the address inputs to the palette ROM. There are 5 address inputs
which allows the game to select 1 of 32 different colors for each pixel on the
screen. First look at address input A4. It goes through chip 14 to the NOR
gate chip 41. The two inputs of the NOR gate are connected to the SH1 and SH2
inputs. If both of these inputs are low then the output of the gate will go
high and select colors 16-31 in the palette, otherwise colors 0-15 will be
selected.

The next two address inputs, A2, A3, come through chip 14 to the OR gates,
chip 42. The circuit that generates these two address inputs is actually
simpler then it looks. We start with 4 image data inputs, each of which come
from a different image bus:

1Y = SH1        Image data from RAM
2Y = SH2        Image data from RAM
3Y = OD1        Image data from graphics ROM
4Y = OD2        Image data from graphics ROM

The two OD inputs go to the AND gates in chip 56. The other input of each of
each of these gates goes to the NOR gate 41 which we looked at earlier. If
either of the SH busses goes high then the AND gates will be disabled thus
preventing the OD image data from getting through. This give the SH images
priority over the OD images, the SH images will always appear on top of the
OD images. The OR gates 42, allow either the SH or OD data to pass onto
addresses A2 and A3.

The final 2 address bits to the PROM (A0, A1) come through chip 14 to chip
29 which is a multiplexer chip. The data for A0, A1 can come from two
sources, the BACK1/2 inputs, and from chip 30. The S input to the mux selects
which gets passed to A0,A1. The select input is controlled by the NOR gate
41. Whenever the two bits of image data are both low, the BACK1/2 inputs to
the mux are selected, thus selecting a background color. If either of the
image data bits is high then the A input of the mux is selected which comes
from chip 30.

Chip 30 is also a mux chip. It selects either the 1C0/1C1 inputs or the
2C0/2C1 inputs. The selection is controlled by NOR gate 41, so that if
an SH image is being displayed 1C0/1C1 is selected, otherwise 2C0/2C1 is
selected.

3.5 Putting all together

Now that we have looked at all the details of the video system we can put it
together into a complete description of how the video system works.

We are assuming that the screen on this game is 32x32 characters. The CRT
controller generates the address to access the RAM at $400 - $FFF to draw
the character at each location on the screen. There are three ranges off
address between $400-$FFF and each is 1024 bytes long (1024 = 32x32). Here
is the function of each range:


$400-$7FF
        Bit 0..7 = Select character to display

$800-$BFF
        Bit 0..7 = Select Shape to display over current character

$C00-$FFF
        Bit 0,1 = Color Palette select for current SHAPE Image (SH)
        Bit 2,3 = Color Palette select for current Character Image (OD)
        Bit 4..7 = Not connected

The character ROMS have the following format:

Total characters: 256
Size of characters: 8x8 pixels
Color bits per pixel: 2
        1 bit plane from ROM 73
        1 bit plane from ROM 75

The SHAPE RAM is written to at the following addresses:

$1000-$13FF = Shape bank 0, Color plane 0
$1400-$17FF = Shape bank 1, Color plane 0
$1800-$1BFF = Shape bank 0, Color plane 1
$1C00-$1FFF = Shape bank 1, Color plane 1

The format of the SHAPE images is the same as the character ROMS except
that there are only 128 SHAPE images in each bank.

The SHAPE image is selected by the data in $800-$BFF. Bits 0..6 select the
image to draw, bit 7 selects which bank to use.

There are 32 colors in the color palette, they are setup as follows:

00-15 Shape colors
16-31 Character colors


4.0 Sound (To be added at a later date)


Appendix 1: Converting Binary to Hex

It will often be necessary to convert from binary to hexadecimal when
figuring out address decoding, and other parts of the circuit. This process
is actually quite easy:

Start with a binary number:

1001111100001010

first, working right to left break it up into 4 bit wide chunks:

1001 | 1111 | 0000 | 1010

Each chunk represents a different hexadecimal digit:

0000 = 0      0100 = 4      1000 = 8       1100 = C
0001 = 1      0101 = 5      1001 = 9       1101 = D
0010 = 2      0110 = 6      1010 = A       1110 = E
0011 = 3      0111 = 7      1011 = B       1111 = F

1001 | 1111 | 0000 | 1010
  9     F       0      A

So this binary number is $9F0A in hex. The '$' is traditionally used to
indicate a hex decimal number. For emulators that are written in C, hex
number are proceeded by a '0x'. So in C $9F0A would be typed: 0x9F0A.